import dayjs from "dayjs" // 导入日期js
import { ElNotification,ElMessage } from 'element-plus'// 导入notify通知模块
import data from './data.js'

export default {
    // 变量列表信息
    data:data,

    // 获取选项数据
    //
    //  item    待获取的列表下标【该下标需要在data.js文件中进行定义才行】
    localdata(item = 'switchTypeList'){
        if(!this.data[item]){
            return [];
        }
        var arr = []
        for(var i in this.data[item]){
            if(this.data[item][i] == ''){
                continue
            } else {
                arr.push({
                    text:this.data[item][i],
                    value:i,
                    disable:false,
                })
            }
        }
        return arr
    },

    // notify弹窗消息
    //
    //  title   弹窗标题
    //  message 弹窗消息体，支持map、list格式
    //  typ     弹窗类型，允许值：success、error等
    notify(title = "",message = "",typ = ""){
        if(typeof(message) == "object" && message[0]){
            message = message.join("<br/>")
        } else if(typeof(message) == "object"){
            var inf = message
            message = []
            for(var i in inf){
                if(inf[i] == " "){
                    inf[i] = ""
                }
                if((i+"").length >= 3 && (i+"").substring(0,2) == "__"){
                    message.push(inf[i])
                    continue
                } else if(inf[i] && inf[i].length == 0){
                    message.push("<b>"+i+"</b>")
                    continue
                }
                message.push(i + ": "+inf[i])
            }
            message = message.join("<br/>")
        }
        // 预先请求一下权限，避免后续切换后无法进行提示
        Notification.requestPermission()
        if(window.document.hidden){
            // 如果页面被隐藏的话，就同步发送浏览器系统通知以提醒用户
            Notification.requestPermission().then(res=>{
                if(res == "granted"){
                    new Notification(title, {
                        dir: 'ltr',
                        lang: 'zh-CN',
                        body: message,
                        icon: '/index_assets/favicon.ico'
                    });
                }
            })
        }
        ElNotification({
            title:title,
            message:message,
            dangerouslyUseHTMLString:true,
            showClose:false,
            type:typ,
        })
    },
    
    // 数字千分位格式化
    //
    // x   Number/String 待格式化的数字
    number_format(x = 0){
        x = x.toString();
        var pattern = /(-?\d+)(\d{3})/;
        while (pattern.test(x))
            x = x.replace(pattern, "$1,$2");
        return x;
    },

    // 时间戳转时间
    //
    //  inf Number/string 时间戳
    //  ins enum 时间戳类型 0-unix时间戳 1-毫秒级 2-微秒级 3-纳秒级
    timesmarp(inf,ins = 0){
        if(ins == 1){
            inf = inf / 1000
        } else if (ins == 2) {
            inf = inf / 1000000
        } else if (ins == 3) {
            inf = inf / 1000000000
        }
        return dayjs.unix(inf).format("YYYY-MM-DD HH:mm:ss")
    },
    
    // 格式化字节大小
    //
    //  size  文件大小，单位：B
    //  num   保留小数  默认2
    formatBytesSize(size = 0, num = 2){
        if (0 == size) return "0 B";
        var c = 1024, d = num || 2, e = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"],
        f = Math.floor(Math.log(size) / Math.log(c));
        return parseFloat((size / Math.pow(c, f)).toFixed(d)) + " " + e[f];
    },

    
    // 数据复制
    // 此事件为ElTable表格的双击复制事件
    //
    //  row：被双击的单元格所在的行的数据对象。
    //  column：被双击的单元格所在的列的定义对象。
    //  cell：被双击的单元格的 DOM 对象。
    //  event：原生的双击事件对象。
    elTableCopyText(row, column, cell, event){
        // 双击复制
        const textToCopy = event.target.innerText;
        if(navigator.clipboard){
            // 安全模式下，允许直接访问剪切板
            navigator.clipboard.writeText(textToCopy)
                .then(() => {
                    ElMessage({ message: '复制成功', type: 'success' }); // 提示
                })
                .catch(error => {
                    ElMessage({ message: '复制失败: '+error, type: 'error' });
                    console.error('复制失败:', error);
                });
        } else {
            // http非安全模式下，使用兼容方案进行复制
            const input = document.createElement('input')
            input.value = textToCopy
            document.body.appendChild(input)
            input.select()
            document.execCommand('copy')
            document.body.removeChild(input)
        }
    },
}